package com.pan.creational.abstractfactory;

import com.pan.creational.abstractfactory.entity.color.Color;
import com.pan.creational.abstractfactory.factory.AbstractFactory;
import com.pan.creational.abstractfactory.entity.shape.Shape;
import com.pan.creational.abstractfactory.factory.CreateFactory;

/**
 * 抽象工厂模式  gof23中的 创建型模式 的一种
 *
 * 工厂的抽象，把工厂的创建封装起来，
 * 通过工厂的工厂 生成 工厂 ，
 * 在通过工厂生成 具体的对象
 *
 * 缺点是太复杂了，每次添加类都需要 实现一套工厂类和 工厂的工厂 的实现。。。
 * （不过我在这个例子里使用了xml配置文件和反射，规避掉了这一点）
 *
 */
public class AbstractFactoryApplication {

    public static void main(String[] args) throws Exception {
        AbstractFactory colorFactory = CreateFactory.create("colorFactory");
        AbstractFactory shapeFactory = CreateFactory.create("shapeFactory");

        Color blue = (Color) colorFactory.get("blue");
        blue.fill();

        Shape square = (Shape)shapeFactory.get("square");
        square.draw();

    }
}
